package com.mjf.net.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class SocketTCPServer {
    public static void main(String[] args) throws IOException {

        // 监听本机的 9999 端口监听, 等待连接
        // ServerSocket 可以通过 accept() 返回多个Socket[多个客户端连接服务器的并发]
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务端，等待连接9999端口..");

        // 没有客户端连接9999端口时，程序会阻塞, 等待连接
        // 有客户端连接时，则会返回Socket对象，程序继续
        Socket s = ss.accept();

        // Socket.getInputStream() 读取客户端写入到数据通道的数据
        InputStream is = s.getInputStream();
        // Socket.getInputStream() 发送数据到数据通道
        OutputStream os = s.getOutputStream();

        byte[] data = new byte[1024];
        int len;

        while((len = is.read(data)) != -1) {
            System.out.println(new String(data, 0, len).toUpperCase());
        }

        // 禁用此 socket 的输入流
        s.shutdownInput();

        boolean flag = true;

        while(flag) {
            System.out.println("请输入：");
            Scanner scan = new Scanner(System.in);
            if(scan.hasNext()) {
                String input = scan.next();
                if(input.equals("exit")) {
                    flag = false;
                } else {
                    os.write(input.getBytes());
                    os.flush();
                }
            }

        }

        // 关闭 socket
        s.close();
        ss.close();

    }
}
